﻿using FreeSql;

namespace Sage.FreeSqlManager.Models
{
    /// <summary>
    /// 数据库连接配置 - 定义单个数据库连接的所有配置项
    /// </summary>
    public class DbConnectionConfig
    {
        /// <summary>
        /// 数据库类型
        /// </summary>
        /// <value>默认值为MySql</value>
        public DataType DataType { get; set; } = DataType.MySql;


        /// <summary>
        /// 连接字符串 - 必须项
        /// </summary>
        /// <value>数据库连接字符串</value>
        /// <remarks>使用C#12的required关键字确保必须设置此属性</remarks>
        public string ConnectionString { get; set; } = string.Empty;

        /// <summary>
        /// SQL命令超时时间（秒）
        /// </summary>
        /// <value>默认为30秒</value>
        public int CommandTimeout { get; set; } = 60;

        /// <summary>
        /// 是否自动同步结构
        /// </summary>
        /// <value>默认值为false</value>
        /// <remarks>生产环境建议关闭</remarks>
        public bool UseAutoSyncStructure { get; set; } = false;

        /// <summary>
        /// 不使用命令参数化执行，针对 Insert/Update
        /// </summary>
        public bool UseNoneCommandParameter { get; set; } = true;

        /// <summary>
        /// 是否监控命令 - 输出SQL到控制台
        /// </summary>
        /// <value>默认值为false</value>
        public bool UseMonitorCommand { get; set; } = false;

        /// <summary>
        /// 是否启用租户模式
        /// </summary>
        /// <value>默认值为false</value>
        /// <remarks>设置为true时将自动应用租户过滤器和审计</remarks>
        public bool EnableTenant { get; set; } = false;

        /// <summary>
        /// 启动延迟加载
        /// </summary>
        public bool UseLazyLoading { get; set; } = false;
        /// <summary>
        /// 是否启用读写分离
        /// </summary>
        /// <value>默认为false</value>
        public bool EnableReadWriteSeparation { get; set; } = false;

        /// <summary>
        /// 从库连接字符串集合，启用读写分离时使用
        /// </summary>
        /// <value>默认为null</value>
        public string[]? SlaveConnectionStrings { get; set; }
    }
}